package com.seeyon.apps.brwh.customFieldCtrl;

import com.seeyon.apps.brwh.kit.DBKit;
import com.seeyon.cap4.form.bean.ParamDefinition;
import com.seeyon.cap4.form.bean.fieldCtrl.FormFieldCustomCtrl;
import com.seeyon.cap4.form.util.Enums;
import com.seeyon.ctp.common.log.CtpLogFactory;
import com.seeyon.ctp.organization.po.OrgMember;
import com.seeyon.ctp.util.DBAgent;
import com.seeyon.ctp.util.StringUtil;
import com.seeyon.ctp.util.UUIDLong;
import org.apache.commons.logging.Log;

import java.util.List;
import java.util.Map;

public class SecondDetailTableBtn extends FormFieldCustomCtrl {
    private static final Log log = CtpLogFactory.getLog(BaiDuOcrBtn.class);

    /**
     * 返回自定义控件唯一的key，控件key可以使用平台www.seeyon.com.utils.UUIDUtil.getUUIDString()接口	生成一个uuid，将此Id作为控件的key
     * @return
     */
    @Override
    public String getKey() {
        return "1267193202406241001";
    }

    /**
     * 获取控件名称
     * @return
     */
    @Override
    public String getText() {
        return "二级明细表扩展";
    }

    /**
     * 定义此自定义控件是否支持批量刷新
     *
     * @return
     */
    @Override
    public boolean canBathUpdate() {
        return false;
    }
    /**
     * 此控件是否是附件类控件
     *
     * @return
     */
    @Override
    public boolean isAttachment() {
        return true;
    }

    /**
     * 新建的时候生成此自定义控件的值，此值会存放在对应动态表的对应字段上，一般情况下只有需要上传附件类的自定义控件才需要此接口。
     *
     * @param oldVal
     * @return
     */
    @Override
    public Object genVal(Object oldVal) {
        if (StringUtil.checkNull(String.valueOf(oldVal))) {
            return UUIDLong.longUUID();
        } else {
            return oldVal;
        }
    }

    @Override
    public List<String[]> getListShowDefaultVal(Integer integer) {
        return null;
    }

    /**
     * 初始值生成接口
     */
    @Override
    public String[] getDefaultVal(String s) {
        return new String[0];
    }

    /**
     * 控件初始化接口，此接口在控件初始化的时候，会调用，主要用于定义控件所属插件id、在表单编辑器中的图标、表单编辑器中有哪些属性可以设置。
     * 使用举例：在接口中定义自定义控件在在表单编辑器中有哪些控件属性需要配置
     */
    @Override
    public void init() {
        this.setPluginId("secondDetailTableBtn");//控件所属插件id
        this.setIcon("cap-icon-e-invoice");//控件在表单编辑器中的图标
        log.info("自定义控件" + this.getText() + "init执行开始");
        ParamDefinition eivoiceDef = new ParamDefinition();//控件属性设置定义对象
        eivoiceDef.setDialogUrl("apps_res/cap/customCtrlResources/secondDetailTableResources/html/secondDetailTableBtn.html");//控件属性点击之后弹出的设置对话框的url
        eivoiceDef.setDisplay("二级明细扩展");//如果要做国际化 这个地方只能存key
        eivoiceDef.setName("mapping");//控件属性名
        eivoiceDef.setParamType(Enums.ParamType.button);//控件属性类型
        addDefinition(eivoiceDef);
        log.info("自定义控件" + this.getText() + "init执行结束，params.size:" + super.params.size());
    }

    /**
     * 定义PC端自定义控件运行态资源注入信息
     * path:文件夹路径
     * jsUri:定义PC端表单运行态加载第三方JavaScript的路径
     * cssUri：定义PC端表单运行态加载第三方CSS的路径
     * initMethod:定义PC端表单运行态第三方js入口方法名称
     * nameSpace：此自定义控件前端运行时的命名空间，可以参照一下写法来定义命名空间
     * @return
     */
    @Override
    public String getPCInjectionInfo() {
        return "{path:'apps_res/cap/customCtrlResources/secondDetailTableResources/',jsUri:'js/secondDetailTableBtn.js',initMethod:'init',nameSpace:'field_" + this.getKey() + "'}";
    }

    /**
     * 获取移动端自定义控件运行态资源注入信息
     * path：'http://'+m3应用包mainifest.json中的urlSchemes的值+'v'+m3应用包mainifest.json中的version的值
     * weixinpath: 微信端打开的时候使用的m3/apps/v5/自定义控件移动端资源目录名称/,weixinpath配置的就是此自定义控件移动端资源目录名称
     * jsUri:移动端表单运行态加载第三方JavaScript的路径
     * initMethod:定义M3端表单运行态第三方js入口方法名称
     * * nameSpace:定义M3端表单运行态命名空间
     *
     * @return
     */
    @Override
    public String getMBInjectionInfo() {
        return "{path:'http://einvoice.v5.cmp/v1.0.0/',weixinpath:'invoice',jsUri:'js/formEinvoiceMbRuning.js',initMethod:'init',nameSpace:'field_"+this.getKey()+"'}";

    }
    /**
     * 定义控件对应数据库所需长度
     * 注意：一旦自定义控件长度定好，上线部署到OA环境中之后，
     * 此接口返回的长度不允许改变，因为上线之后如果有表单使用
     * 了此自定义控件，就会在数据库中创建字段长度为此指定长度
     * 的数据列。
     *
     * @return
     */
    @Override
    public String getFieldLength() {
        return "255";
    }

    /**
     * 是否支持套红，自定义控件默认false，如果支持需要重新接口返回true
     *
     * @return
     */
    @Override
    public boolean canInjectionWord() {
        return false;
    }
}
